﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WhiteFox.DAlessio.Agenda.Domain.Model;
using WhiteFox.DAlessio.Agenda.View.Controllers;
using WhiteFox.DAlessio.Patterns.UI.MVC;

namespace WhiteFox.DAlessio.Agenda.View
{
    public partial class frmCadastrar : frmCadastrarView, IView
    {
        Contato _contato = null;

        public frmCadastrar()
        {
            InitializeComponent();

            btnTelefones.Enabled = false;
            btnNovoTelefone.Enabled = false;

            btnOK.Enabled = true;

            this.txtCadastrar.Focus();
        }

        public frmCadastrar(Contato contato)
        {
            InitializeComponent();

            _contato = contato;

            InitData(false);

            this.AcceptButton = this.btnNovoTelefone;

            btnTelefones.Enabled = true;
            btnNovoTelefone.Enabled = true;

            btnOK.Enabled = false;

            this.txtCadastrar.Focus();
        }


        private void btnOK_Click(object sender, EventArgs e)
        {
            if (_contato == null)
                _contato = new Contato() { Nome = txtCadastrar.Text };

            Controller.Domain.Repository.Save(_contato);
            MessageBox.Show("Contato cadastrado com sucesso!");
            
            Controller.RaiseModelChange(sender, new ModelChangeEventArgs(true));
            
            txtCadastrar.ResetText();

            _contato = null;

            //this.Close();
        }

        public void ModelChange(object sender, ModelChangeEventArgs e)
        {
            InitData(e.ForceChange);
        }

        public void InitData(bool isForceLoad)
        {
            if (isForceLoad)
                _contato = Controller.Domain.Repository.GetByID(_contato.Id);

            txtCadastrar.Text = _contato.Nome;
        }

        private void btnTelefones_Click(object sender, EventArgs e)
        {
            if (_contato != null)
            {
                frmListarTelefones view = new frmListarTelefones(_contato);
                view.Show();
            }
        }

        private void btnNovoTelefone_Click(object sender, EventArgs e)
        {
            if (_contato != null)
            {
                using (frmCadastrarTelefone view = new frmCadastrarTelefone(_contato))
                {
                    view.ShowDialog();
                }
            }
        }

    }

    //Classe necessária para que o Form seja visualizado em modo Designer (o modo Designer não consegue renderizar o Form em classes com herança genérica)
    public class frmCadastrarView : ViewBase<ContatoControler> { }   

}
